home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / archives / com / internet / sting / sting.lzh / STING / dialer / rem_ctrl / fake.c next >
C/C++ Source or Header  |  1997-05-04  |  5KB  |  159 lines

  1.  
  2. /*********************************************************************/
  3. /*                                                                   */
  4. /*     This program pretents being a Dialer server, so that it       */
  5. /*      can be connected to by a dial client. It's there to show     */
  6. /*      how the remote control dialing facility works.               */
  7. /*                                                                   */
  8. /*     (c) Peter Rottengatter              from 16. Januar 1997      */
  9. /*                                                                   */
  10. /*********************************************************************/
  11.  
  12.  
  13. #include <aes.h>
  14. #include <tos.h>
  15. #include <stdio.h>
  16. #include <time.h>
  17. #include <string.h>
  18.  
  19. #include "transprt.h"
  20. #include "remctrl.h"
  21.  
  22.  
  23. #define  TIMEOUT   60
  24.  
  25.  
  26. void  gem_program (void),  do_some_work (void);
  27. long  get_sting_cookie (void);
  28.  
  29. DRV_LIST   *sting_drivers;
  30. TPL        *tpl;
  31. char       alert[200];
  32. int        gl_apid;
  33.  
  34. char  not_there[] = "[1][ |  STinG is not loaded or enabled !   ][ Hmmm ]";
  35. char  corrupted[] = "[1][ |  STinG structures corrupted !   ][ Oooops ]";
  36. char  found_it[]  = "[3][ |  Driver \'%s\',|  by %s, found,   |  version %s.][ Okay ]";
  37. char  no_module[] = "[1][ |  STinG Transport Driver not found !   ][ Grmbl ]";
  38. char  query[]     = "[3][ |  Dialing request using script file   |    \'%s\',|    up to %d tries !   ][ Done | Error ]";
  39. char  number[]    = "[2][ |  Parameter is %d. Wanna change it ?   ][ < | Okay | > ]";
  40. char  hangup[]    = "[3][ |  Hang up request received !   ][ Okay ]";
  41. char  proceed[]   = "[2][ |  Proceed faking a dialer ?   ][ Proceed | Abort ]";
  42. char  no_udp[]    = "[1][ |  Couldn't open UDP connection !  ][ Hmm ]";
  43.  
  44.  
  45.  
  46. void  main()
  47.  
  48. {
  49.    gl_apid = appl_init();
  50.  
  51.    gem_program();
  52.  
  53.    appl_exit();
  54.  }
  55.  
  56.  
  57. void  gem_program()
  58.  
  59. {
  60.    sting_drivers = (DRV_LIST *) Supexec (get_sting_cookie);
  61.  
  62.    if (sting_drivers == 0L) {
  63.         form_alert (1, not_there);
  64.         return;
  65.       }
  66.    if (strcmp (sting_drivers->magic, MAGIC) != 0) {
  67.         form_alert (1, corrupted);
  68.         return;
  69.       }
  70.  
  71.    tpl = (TPL *) (*sting_drivers->get_dftab) (TRANSPORT_DRIVER);
  72.  
  73.    if (tpl != (TPL *) NULL) {
  74.         sprintf (alert, found_it, tpl->module, tpl->author, tpl->version);
  75.         form_alert (1, alert);
  76.         do_some_work();
  77.       }
  78.      else
  79.         form_alert (1, no_module);
  80.  }
  81.  
  82.  
  83. long  get_sting_cookie()
  84.  
  85. {
  86.    long  *work;
  87.  
  88.    for (work = * (long **) 0x5a0L; *work != 0L; work += 2)
  89.         if (*work == 'STiK')
  90.              return (*++work);
  91.  
  92.    return (0L);
  93.  }
  94.  
  95.  
  96. void  do_some_work()
  97.  
  98. {
  99.    NDB     *ndb;
  100.    time_t  timeout;
  101.    int     handle, message[2], response, ready;
  102.  
  103.    if ((handle = UDP_open (0, IP_DIALER_PORT)) < 0) {
  104.         form_alert (1, no_udp);
  105.         return;
  106.       }
  107.  
  108.    for (;;) {
  109.  
  110.         timeout = time (NULL) + TIMEOUT;
  111.  
  112.         do {
  113.              evnt_timer (200, 0);
  114.  
  115.              if ((ndb = CNget_NDB (handle)) != NULL) {
  116.                   switch (* (int16 *) ndb->ndata) {
  117.                      case IP_DIAL_REQUEST :
  118.                        sprintf (alert, query, ndb->ndata + 4, * (int16 *) (ndb->ndata + 2));
  119.                        if (form_alert (1, alert) == 1)
  120.                             message[0] = IP_DIAL_DONE,  message[1] = 0;
  121.                          else {
  122.                             message[0] = IP_DIAL_ERROR;
  123.                             response = 0;
  124.                             do {
  125.                                  sprintf (alert, number, response);
  126.                                  ready = 0;
  127.                                  switch (form_alert (1, alert)) {
  128.                                     case 1 :   response --;   break;
  129.                                     case 2 :   ready = 1;     break;
  130.                                     case 3 :   response ++;   break;
  131.                                     }
  132.                               } while (! ready);
  133.                             message[1] = response;
  134.                           }
  135.                        break;
  136.                      case IP_DIAL_HANGUP :
  137.                        form_alert (1, hangup);
  138.                        message[0] = IP_DIAL_DONE;
  139.                        message[1] = 0;
  140.                        break;
  141.                      }
  142.                   KRfree (ndb->ptr);
  143.                   KRfree (ndb);
  144.                   UDP_send (handle, (char *) message, 4);
  145.                   UDP_close (handle);
  146.  
  147.                   if ((handle = UDP_open (0, IP_DIALER_PORT)) < 0) {
  148.                        form_alert (1, no_udp);
  149.                        return;
  150.                      }
  151.                 }
  152.           } while (time (NULL) < timeout);
  153.  
  154.         if (form_alert (1, proceed) != 1)   break;
  155.       }
  156.  
  157.    UDP_close (handle);
  158.  }
  159.